const {findUserByAccount,findUserById,findUsers,findUsersByLimit,insertUser} = require('../models/user')
const {createToken,mkPager} = require('../utils')
const { roles, ADMIN } = require('./config')
exports.doLogin = async (ctx, next) => {
    // Controller
    // 1.获取
    let { account, password } = ctx.request.body
    // 业务判断
    if (!account || !password) {
        return ctx.faild('必须传递用户名和密码')
    }
    // 查询用户信息 model
    const res = await findUserByAccount(account)
    if (res.length==-0) {
        return ctx.faild("用户或者密码不存在")
    }
    let user= res[0]
    
    if (user.password!== password) {
        return ctx.faild("用户或者密码不存在")
    }
    const seveUset={
        id:user.id,
        account:user.account,
        type:user.role_id,
    }
    const token= createToken(seveUset)
    // 生成token 
    ctx.success({
        token
    })
}
exports.getInfo= async ctx => {
    const user = ctx.state.user
    if (!user) return ctx.faild('用户信息获取失败!')
    let {id} =user
    const res = await findUserById(id)
    const dbUser =res[0]
    if(!dbUser) return ctx.faild('用户信息不存在,或者已经被删除');
    ctx.success({
        info:"获取成功",
        roles:[{ name:dbUser.role_name}]
    })
}
exports.logout=async ctx=>{
    // 如果你是session
    // ctx.session.user = null; // session退出
    ctx.blackTokenList.push(ctx.headers.token)
    return ctx.tokenExpires('退出成功')
}
exports.queryList=async ctx=>{
    let { pageNo,pageSize,type}= ctx.query
    const res= await findUsers()
    if(pageNo||pageSize){
        const {start, end} = mkPager(pageNo,pageSize)
        const data = await findUsersByLimit(start, end)
        const pages = Math.ceil(res.length / pageSize)
        ctx.success({
            data:{
                data
            },
            pages, // 能分成多少页
            size: pageSize,
            rows:res.length, // 数据有多少调
        })
    }else {
         //开始查询数据
        ctx.success(res)
    }
}
exports.createUser= async ctx=>{
    //只能是adminstrator
    const {type}=ctx.state.user
    if(type!=ADMIN){ 
        return ctx.faild('无权限创建用户')
    }
    const {account,password,role_id}=ctx.request.body;
    const role_name=roles[role_id]
    const insertRes= await insertUser([account,password,role_id,role_name])
    if(insertRes.affectedRows!==1){
        return ctx.faild('创建用户失败')
    }
    ctx.success("创建用户成功")
}